A conventional development cycle for computer software code includes repeated steps of authoring, testing, debugging and modifying the code during initial development phases or long after deployment of the product. Traditional debugger tools, however, are generally ineffective for debugging computer software code developed on distributed systems, such as the cloud environment. As a result, developers resort to printf debugging or no debugging at all. This lack of debugging capabilities on distributed systems leads to increased time spent fixing problems as they occur or preventing them in the first place.
Known debuggers are primarily directed toward process state debugging rather than distributed service debugging. Developers on the cloud environment have an increased need to debug their services or requests, rather than simply debug a specific software process or thread. Developers generally debug software processes on distributed systems by collecting monitoring and tracking information to draw conclusions. This process can take minutes to days to carry out. The product is only pushed back to production once it has been fixed. In fact, most available debugging tools are directed toward achieving the highest fidelity by resolving every aspect of symbols, variables and memory while the software process is stopped. Thus, live debugging of the process cannot be achieved because the software process must be stopped to perform the debugging.